home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / TSR.SWG / 0005_Screen Saver TSR.pas < prev    next >
Pascal/Delphi Source File  |  1993-05-28  |  2KB  |  58 lines

  1. {  I'm sorry that my reply Sounded rude, it wasn't meant as such.  Probably
  2. the best way to make a screen saver TSR is to latch onto inT $8, which is
  3. called once a second to update the clock, using GetIntVec and SetIntVec.
  4. Since your other TSR code is probably a normal Procedure For whatever other
  5. interrupts you are using, just put the screen blanker Procedure inside the
  6. other Procedure, and hopefully when you use Keep Dos will retain both your
  7. normal TSR code and the screen saver code.
  8. }
  9. {$M 4096,0,0}
  10. {$N-,S-}
  11. Program TSRplusSaver;
  12. Uses Dos;
  13.  
  14. Procedure MyTSR (Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP : Word);
  15. inTERRUPT;
  16. Const Maximum = 120; {2 minutes}
  17. Var Elapsed : Word;
  18. Var Saving  : Boolean;
  19.  
  20. Procedure ResetSvr (Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP : Word);
  21. Interrupt;
  22. begin
  23.   if Saving then begin
  24.      Saving := False;
  25.      Port[984] := 41;      {Enable 6845 video}
  26.      end;
  27.   Elapsed := 0;
  28.   end;
  29.  
  30. Procedure MyScreenSaver (Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP : Word);
  31. Interrupt;
  32. begin
  33.   Inc (Elapsed);
  34.   if Elapsed=Maximum then
  35.      Port[984] := 33;      {Disable 6845 video}
  36.      Saving := True;
  37.      end;
  38.   end;
  39.  
  40. begin {MyTSR}
  41.   MemW[$b800:$0000] := 3585; {Happy face}
  42.   end;
  43.  
  44. begin
  45.    SetIntVec( $09, @ResetSvr);      {Reset screen saver on Keypress}
  46.    SetIntVec( $08, @MyScreenSaver); {Increment elapsed every second,
  47.                                      activate when ready}
  48.    SetIntVec( $1C, @MyTSR);         {Set up your TSR code}
  49.    Keep(0);
  50. end.
  51.  
  52. {   I'm pretty sure something like this will work, but I haven't tried it
  53. myself yet.  of course you'll have to add CLI instructions at the
  54. beginning of each of the interrupt Procedure and a restore interrupts after
  55. it, so nothing can occur during them except NMI.  You may have some trouble
  56. there, since on the PCjr the NMI includes keyboard input (pretty stupid,
  57. huh?)
  58. }